package com.glink.manage.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.glink.common.exception.GeneralSimpleException;
import com.glink.manage.domain.CodeBean;
import com.glink.manage.dto.code.*;
import com.glink.manage.vo.code.CodeBaseVO;
import com.glink.manage.vo.code.CodeTreeVo;
import com.glink.manage.vo.code.CodeVO;

import java.util.List;

/**
 * @class: code
 * @author: qiushaoshan
 * @since: 2025-01-07
 * @description: 代码接口
 */
public interface CodeService extends IService<CodeBean> {

    /**
     * 查询所有代码
     * @return 代码列表
     */
    List<CodeVO> getLeafList();

    /**
     * 根据子节点类型查询code
     * @param codeType 父节点类型
     * @param visible 是否可见
     * @return 代码列表
     */
    List<CodeVO> findByType(String codeType, String visible);

    /**
     * 上升or下降
     * @param srcId 第一个代码ID
     * @param tgtId 第二个代码ID
     * @return 状态
     * @throws GeneralSimpleException 异常信息
     */
    boolean upAndDown(String srcId, String tgtId) throws GeneralSimpleException;

    /**
     * 根据代码类型删除代码
     * @param id 代码ID
     * @return 删除状态
     */
    boolean deleteById(String id);

    List<CodeVO> findLeftTree();

    /**
     * 代码新增
     * @param dto 新增信息
     * @return 新增状态
     * @throws GeneralSimpleException 异常信息
     */
    boolean insert(CodeAddDTO dto) throws GeneralSimpleException;

    /**
     * 修改代码类型
     * @param dto 代码信息
     * @return 修改状态
     */
    boolean modify(CodeUpdateDTO dto) throws GeneralSimpleException;

    /**
     * 根据条件查询代码信息
     * @param dto 条件信息
     * @return 代码信息
     */
    List<CodeBaseVO> findByCondition(CodeQueryDTO dto);

    /**
     * 根据条件查询代码项(包括子代码)
     * @param dto 查询条件
     * @return 查询结果
     */
    List<CodeTreeVo> findLeafTreeByCondition(CodeSubCodeQueryDTO dto);

    /**
     * 新增子代码
     * @param dto 代码信息
     * @return 新增状态
     * @throws GeneralSimpleException 异常信息
     */
    boolean insertSubCode(CodeSubCodeAddDTO dto) throws GeneralSimpleException;

    /**
     * 更新子代码
     * @param dto 代码信息
     * @return 更新状态
     */
    boolean updateSubCode(CodeSubCodeUpdateDTO dto) throws GeneralSimpleException;

    /**
     * 根据父级类型和键值查询类别名称
     * @param parentType 父级类型
     * @param key 键值
     */
    String findNameByParentTypeAndKey(String parentType, String key);

    /**
     * 根据类别查询code码值
     * @param codeTypeList code
     * @return code信息
     */
    List<CodeVO> findByTypeList(List<String> codeTypeList);
}
